'use strict';

/**
 * @param {Egg.Application} app - egg application
 */
module.exports = app => {
  const { router, controller, io } = app;
  router.get('/', controller.home.index);

  // show test
  router.get('/show', controller.home.show);
  router.get('/user/:id?/:name?', controller.home.findOne);
  router.get('/addUser', controller.home.addUser);


  router.get('/car', controller.home.findCar);

  router.get('/news', controller.news.list);

  router.get('/login', controller.home.login); // login

  router.get('/createUser', controller.user.createUser);
  // router.get('users', '/users', 'user.users')

  router.get('users', '/users', controller.user.users);
  router.get('/users/:id', controller.user.findOne);
  router.get('/delete/:id', controller.user.delete);
  router.get('/update/:id', controller.user.update);


  // curl
  router.get('/get', controller.http.get);
  router.get('/post', controller.http.post);
  router.get('/httpupload', controller.http.httpupload);


  // 上传
  router.get('/upload', controller.upload.show);
  router.post('/submit', controller.upload.submit);


  // jsonp  ,  用户请求对应的 URL 访问到这个 controller 的时候，如果 query 中有 _callback=fn 参数，将会返回 JSONP 格式的数据，否则返回 JSON 格式的数据。
  const jsonp = app.jsonp();
  app.router.get('/api/news/:id', jsonp, app.controller.news.show);
  app.router.get('/api/news', jsonp, app.controller.news.list);


  // api 资源型
  // app.router.resources('routerName', 'pathMatch', controller)
  router.resources('users', '/api/v1/users', controller.v1.users); // app/controller/v1/users.js


  // router.verb('router-name', 'path-match', middleware1, ..., middlewareN, app.controller.action);
  // router-name 给路由设定一个别名，可以通过 Helper 提供的辅助函数 pathFor 和 urlFor 来生成 URL。(可选)
  // 引用中间件middleware
  router.get('search', '/search', app.middleware.uppercase(), app.controller.news.search);


  // socket.io
  // http 接口, 在对应的控制器中可以直接操作socket, 非常方便
  router.get('/iotest', controller.home.iotest);
  router.get('/ioclient', controller.home.ioclient);
  // socket, 指向app/io/controller/chat.js的index方法 , of 是划分命名空间
  // 对于在命名空间"/" 下,监听到的 chat 事件将由 app.io.controller.chat.index 中 chat 方法处理，chat 方法可以前端可以通过调用 socket.emit('chat',{name:'jjj'}),可以将数据传递到app.io.controller.chat.index 中 index 方法中进行处理
  io.of('/').route('chat', app.io.controller.chat.index); // io.of('/').router('event'，handler)
  io.of('/').route('wechat', app.io.controller.chat.wechat); // 触发的wechat事件，交给 app.io.controller.chat.wechat处理


};
